package com.xhsj.user.pms.patent.mapper;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xhsj.user.pms.patent.domain.PatentFile;
import com.xhsj.user.pms.patent.query.OperationerListQuery;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

@Mapper
public interface PatentFileMapper extends BaseMapper<PatentFile> {

    /**
     * 根据专利ID查询申请文件
     *
     * @param page
     * @param disclosureId
     * @return
     */
    IPage<PatentFile> selectApplicationFileByDisclosureId(IPage<PatentFile> page, @Param("disclosureId") String disclosureId);

    //    根据名称搜索获取专利申请文件参数
    IPage<PatentFile> searchApplicationFileByFileName(Page<PatentFile> page, @Param("disclosureId") String disclosureId,
                                                      @Param("fileName") String fileName,
                                                      @Param("fileTypeList") List<Integer> fileTypeList);

    /**
     * 通过交底书id查询专利文件
     * @author 苏小林
     * @date 2020/2/26 10:34
     * @param: disclosureId
     * @param: fileType
     * @return: java.util.List<com.xhsj.patentmanager.system.Patent.domain.PatentFile>
     */
    List<PatentFile> getPatentFileByDiscId(@Param("disclosureId") String disclosureId, @Param("fileType") int fileType, @Param("checkType") int checkType);
//    通知相关文件列表
    IPage<Map<String, Object>> getNoticeFileByDisclosureId(Page<PatentFile> page, @Param("disclosureId") String disclosureId);
//    根据文件名或日期获得通知相关文件列表
    IPage<Map<String, Object>> searchNoticeFileByFileName(IPage<Map<String, Object>> page, @Param("disclosureId") String disclosureId,
                                                         @Param("fileName") String fileName, @Param("uploadTime") String uploadTime);
//    获取交底书的相关的文件
    List<PatentFile> getAllPatentFileByDiscId(@Param("disclosureId") String disclosureId,
                                              @Param("fileType") int fileType,
                                              @Param("checkType") int checkType);

    // 通过交底书id查询最新专利文件
    List<PatentFile> getNewPatentFileByDiscId(@Param("disclosureId") String disclosureId,
                                              @Param("fileType") List<Integer> fileType,
                                              @Param("checkTypeList") List<Integer> checkTypeList);
    //获取所有的交底书文件
    List<Map<String, Object>>  getAllDisclosureFile(@Param("disclosureId") String disclosureId,
                                                    @Param("fileTypeList") List<String> fileTypeList);
    //获取最新的交底书文件
    List<Map<String, Object>>  getNewDisclosureFile(@Param("disclosureId") String disclosureId,
                                                    @Param("fileTypeList") List<String> fileTypeList);
    //    技术负责人选中文件
    List<Map<String, Object>> getCheckOpinionByLeaderUseId(@Param("disclosureId") String disclosureId);
    //获取当前ipr所编写的申请文件
    List<Map<String, Object>> getAllPatentFileByIpr(String disclosureId, List<String> fileTypeList, String userId);
//    多人审核申请文件列表
    List<Map<String, Object>> getManyPeopleFile(@Param("disclosureId") String disclosureId,
                                                @Param("fileType") int fileType);

    List<Map<String, Object>> getPatentFileByPatentFileId(@Param("disclosureId") String disclosureId,
                                                          @Param("patentFileId") String patentFileId);

    List<PatentFile> getByPatentId(@Param("patentId") String patentId);
   //   //修改文件表
    int updataPatentFile(@Param("disclosureId") String disclosureId, @Param("ownerAs")String ownerAs, @Param("checkType")int checkType);
   // 获取选定ipr
    String getCheckIprUserId(@Param("disclosureId") String disclosureId);

    List<PatentFile> getAllPatentFileByOwnerAs(@Param("disclosureId")String disclosureId, @Param("fileType")List<Integer> fileType, @Param("checkTypeList")List<Integer> checkTypeList);

    /**
     * 查询最新的文件-根据交底书id 和 文件类型
     * @author 苏小林
     * @date 2021/1/11 15:50
     * @param: disclosureId
     * @param: fileType
     * @return: java.util.List<com.xhsj.user.pms.patent.domain.PatentFile>
     */
    List<PatentFile> getLatestFileByFileType(@Param("disclosureId") String disclosureId, @Param("fileType") Integer fileType);

    /**
     * 查询交底书相关文件-根据交底书id 和 文件类型
     * @author 苏小林
     * @date 2021/1/13 17:11
     * @param: disclosureId
     * @param: fileType
     * @return: java.util.List<com.xhsj.user.pms.patent.domain.PatentFile>
     */
    List<PatentFile> getPatentFileListByDiscId(@Param("disclosureId") String disclosureId, @Param("fileType") Integer fileType);

    // 获取国内 1国内申请文件
    List<PatentFile> getFileListByDiscId(@Param("disclosureId")String disclosureId, @Param("fileType")int fileType);

    // 删除对应的文件根据DiscId
    void deleteByDiscId(@Param("discId")String discId,@Param("fileTypeList") List<Integer> fileTypeList);

    // 删除对应的文件根据PatentId
    void deleteByPatentId(@Param("patentId")String patentId, @Param("fileTypeList")List<Integer> fileTypeList);

    // 获取操作人通过底书id
    @MapKey("mapKey")
    Map<String, OperationerListQuery> getOperationerList(@Param("disclosureIdList") List<String> disclosureIdList);
}